﻿/*******************************************************************/
/*    Copyright (c) 2022-2024 by GME Team.                         */
/*    All rights reserved.                                         */
/*******************************************************************/

#include "acis/include/ofstapi.hxx"

#include "../utils.hxx"
#include "acis/gme/kernel/gme_same_entity.hxx"
#include "acis/include/alltop.hxx"
#include "acis/include/body.hxx"
#include "acis/include/boolapi.hxx"
#include "acis/include/box.hxx"
#include "acis/include/cstrapi.hxx"
#include "acis/include/edge.hxx"
#include "acis/include/ellipse.hxx"
#include "acis/include/entity.hxx"
#include "acis/include/face.hxx"
#include "acis/include/geometry.hxx"
#include "acis/include/get_top.hxx"
#include "acis/include/getbox.hxx"
#include "acis/include/getowner.hxx"
#include "acis/include/intcurve.hxx"
#include "acis/include/intrapi.hxx"
#include "acis/include/lump.hxx"
#include "acis/include/ofstapi.hxx"
#include "acis/include/plane.hxx"
#include "acis/include/point.hxx"
#include "acis/include/rbi_api.hxx"
#include "acis/include/sample_edges.hxx"
#include "acis/include/shell.hxx"
#include "acis/include/sp3crtn.hxx"
#include "acis/include/straight.hxx"
#include "acis/include/sps3srtn.hxx"
#include "acis/include/sweepapi.hxx"
#include "acis/include/transf.hxx"
#include "acis/include/vertex.hxx"
#include "acis/include/wire_offset_options.hxx"
#include "gtest/include/gtest.h"


class OfstApiTest : public ::testing ::Test {
  private:
    int level;

  protected:
    void SetUp() override { level = initialize_acis(); }

    void TearDown() override { terminate_acis(level); }


    // 辅助函数，仅测试用,为没有coedge的edge生成coedge
    static void EdgeCreateCoedge(EDGE* edge_acis, EDGE* edge_gme) {
        COEDGE* coedge_acis_test1 = ACIS_NEW COEDGE(edge_acis, 0, nullptr, nullptr);
        COEDGE* coedge_gme_test1 = ACIS_NEW COEDGE(edge_gme, 0, nullptr, nullptr);
        COEDGE* coedge_acis_test2 = ACIS_NEW COEDGE(edge_acis, 1, coedge_acis_test1, coedge_acis_test1);
        COEDGE* coedge_gme_test2 = ACIS_NEW COEDGE(edge_gme, 1, coedge_gme_test1, coedge_gme_test1);
        coedge_acis_test1->set_next(coedge_acis_test2);
        coedge_acis_test1->set_previous(coedge_acis_test2);
        coedge_gme_test1->set_next(coedge_gme_test2);
        coedge_gme_test1->set_previous(coedge_gme_test2);
        edge_acis->set_coedge(coedge_acis_test1);
        edge_gme->set_coedge(coedge_gme_test1);
    }
};

/*
 * 函数1：测试gme_api_offset_face_edge接口的偏置功能
 * 测例覆盖范围：straight和ellipse类型的正向偏置，负向偏置，SPAresabs级别长度偏置以及各类型自身特殊测例；异常情况处理测例
 * 已通过：
 * 0. 异常情况 case: 1
 * 1. Straight case数：5
 * 2. Ellipse case数：21
 * 3. Intcurve case数：1
 * 4. Helix case数：1
 * 未通过：
 * intcurve类型的偏置算法精度有待提高，同时自交修复的接口正在开发当中，暂时无法复现
 * 1. 摆动体样条线的intcurve类型的偏置
 *
 *
 * 函数2：测试gme_api_offset_face_loop接口的偏置功能
 * 测例覆盖范围：PLANE面、CONE面的单个以及多个的正常偏置和1e-5长度的偏置；测地线算法性质
 * 已通过：
 * 0. 异常情况 case: 1
 * 1. PLANE面单个闭合LOOP偏置 case:2
 * 2. CONE面上下LOOP偏置 case:2
 * 3. PLANE面的ELLIPSE闭合LOOP的偏置 case:1
 * 4. 圆台体的CONE面上下LOOP偏置测试 case:2
 * 5. 测地线偏置性质测试 case:2
 *
 * 未通过：
 * edge_on_face接口内部精确度问题，待优化
 * 1. 偏置距离为-1e-7时会中断
 * 2. PLANE面的ELLIPSE闭合LOOP的偏置，偏置距离为-1e-5
 * 3. 摆动面的正常偏置，会有1e-4级别精度损失
 * 4. 布尔平面LOOP缺口修复未完成开发
 */

/**
 * @brief gme_api_offset_face_edge接口异常(空指针）情况测试
 */
/*
TEST_F(OfstApiTest, gme_api_offset_face_edge_0_1) {
    // 创建一个边长为10的正方体
    double offsetdistance = 1.0;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}
*/

/**
 * @brief 对法向量为(0,-1,0)的Straight进行偏置
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_1_1) {
    // 创建一个边长为10的正方体
    BODY* body_acis = nullptr;
    BODY* body_gme = nullptr;
    SPAposition originpoint(0.0, 0.0, 0.0);
    SPAposition p1(10.0, 10.0, 10.0);
    api_solid_block(originpoint, p1, body_acis);
    api_solid_block(originpoint, p1, body_gme);
    // 获取face
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(body_acis, face_list_acis);
    get_faces(body_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    double offsetdistance = 3.0;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    EDGE* edge_gme_copy = nullptr;
    face_acis = (FACE*)face_list_acis[1];
    face_gme = (FACE*)face_list_gme[1];
    coedge_acis = face_acis->loop()->start();
    coedge_gme = face_gme->loop()->start();
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 对施加旋转变换的Straight进行正常偏置
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_1_2) {
    // 创建一个边长为10的正方体
    BODY* body_acis = nullptr;
    BODY* body_gme = nullptr;
    SPAposition originpoint(0.0, 0.0, 0.0);
    SPAposition p1(10.0, 10.0, 10.0);
    api_solid_block(originpoint, p1, body_acis);
    api_solid_block(originpoint, p1, body_gme);
    SPAtransf rotate_block = gme_rotate_transf(M_PI / 4, SPAvector(1, 0, 0));
    SPAtransf acis_transf = get_owner_transf(body_acis);
    api_apply_transf(body_acis, acis_transf * rotate_block);
    SPAtransf gme_transf = get_owner_transf(body_gme);
    api_apply_transf(body_gme, gme_transf * rotate_block);
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(body_acis, face_list_acis);
    get_faces(body_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    double offsetdistance = 3.0;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    EDGE* edge_gme_copy = nullptr;
    face_acis = (FACE*)face_list_acis[1];
    face_gme = (FACE*)face_list_gme[1];
    coedge_acis = face_acis->loop()->start();
    coedge_gme = face_gme->loop()->start();
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 对Straight类型，偏置距离为1e-5
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_1_3) {
    // 创建一个边长为10的正方体
    BODY* body_acis = nullptr;
    BODY* body_gme = nullptr;
    SPAposition originpoint(0.0, 0.0, 0.0);
    SPAposition p1(10.0, 10.0, 10.0);
    api_solid_block(originpoint, p1, body_acis);
    api_solid_block(originpoint, p1, body_gme);
    // 获取face
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(body_acis, face_list_acis);
    get_faces(body_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    double offsetdistance = 1e-5;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    EDGE* edge_gme_copy = nullptr;
    face_acis = (FACE*)face_list_acis[1];
    face_gme = (FACE*)face_list_gme[1];
    coedge_acis = face_acis->loop()->start();
    coedge_gme = face_gme->loop()->start();
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 对Straight类型，偏置距离为1e-7
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_1_4) {
    // 创建一个边长为10的正方体
    BODY* body_acis = nullptr;
    BODY* body_gme = nullptr;
    SPAposition originpoint(0.0, 0.0, 0.0);
    SPAposition p1(10.0, 10.0, 10.0);
    api_solid_block(originpoint, p1, body_acis);
    api_solid_block(originpoint, p1, body_gme);
    // 获取face
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(body_acis, face_list_acis);
    get_faces(body_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    double offsetdistance = 1e-7;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    EDGE* edge_gme_copy = nullptr;
    face_acis = (FACE*)face_list_acis[1];
    face_gme = (FACE*)face_list_gme[1];
    coedge_acis = face_acis->loop()->start();
    coedge_gme = face_gme->loop()->start();
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 对Straight类型，偏置距离为负数
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_1_5) {
    // 创建一个边长为10的正方体
    BODY* body_acis = nullptr;
    BODY* body_gme = nullptr;
    SPAposition originpoint(0.0, 0.0, 0.0);
    SPAposition p1(10.0, 10.0, 10.0);
    api_solid_block(originpoint, p1, body_acis);
    api_solid_block(originpoint, p1, body_gme);
    // 获取face
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(body_acis, face_list_acis);
    get_faces(body_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    double offsetdistance = -1.0;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    EDGE* edge_gme_copy = nullptr;
    face_acis = (FACE*)face_list_acis[1];
    face_gme = (FACE*)face_list_gme[1];
    coedge_acis = face_acis->loop()->start();
    coedge_gme = face_gme->loop()->start();
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 对Straight类型，偏置距离为10
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_1_6) {
    // 创建一个边长为10的正方体
    BODY* body_acis = nullptr;
    BODY* body_gme = nullptr;
    SPAposition originpoint(0.0, 0.0, 0.0);
    SPAposition p1(10.0, 10.0, 10.0);
    api_solid_block(originpoint, p1, body_acis);
    api_solid_block(originpoint, p1, body_gme);
    // 获取face
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(body_acis, face_list_acis);
    get_faces(body_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    double offsetdistance = 10;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    EDGE* edge_gme_copy = nullptr;
    face_acis = (FACE*)face_list_acis[1];
    face_gme = (FACE*)face_list_gme[1];
    coedge_acis = face_acis->loop()->start();
    coedge_gme = face_gme->loop()->start();
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 位于Plane面上的ellipse的偏置测试,偏置距离为5.0
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_2_1) {
    BODY* body_acis = nullptr;
    BODY* body_gme = nullptr;
    SPAposition origin_point(0.0, 0.0, 0.0);
    SPAposition cylinder_point(8.0, 0.0, 0.0);
    SPAposition xpt(0, 0, 1);
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 3.0, nullptr, body_acis, nullptr);
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 3.0, nullptr, body_gme, nullptr);
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(body_acis, face_list_acis);
    get_faces(body_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    // edge偏移距离
    double offsetdistance = 5.0;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    face_acis = (FACE*)face_list_acis[1];
    face_gme = (FACE*)face_list_gme[1];
    coedge_acis = face_acis->loop()->start();
    coedge_gme = face_gme->loop()->start();
    // 测试接口
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 位于Plane面上的ellipse的偏置测试,偏置距离为1e-5
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_2_2) {
    BODY* body_acis = nullptr;
    BODY* body_gme = nullptr;
    SPAposition origin_point(0.0, 0.0, 0.0);
    SPAposition cylinder_point(8.0, 0.0, 0.0);
    SPAposition xpt(0, 0, 1);
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 3.0, nullptr, body_acis, nullptr);
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 3.0, nullptr, body_gme, nullptr);
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(body_acis, face_list_acis);
    get_faces(body_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    // edge偏移距离
    double offsetdistance = 1e-5;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    face_acis = (FACE*)face_list_acis[1];
    face_gme = (FACE*)face_list_gme[1];
    coedge_acis = face_acis->loop()->start();
    coedge_gme = face_gme->loop()->start();
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 位于Plane面上的ellipse的偏置测试,偏置距离为1e-7
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_2_3) {
    BODY* body_acis = nullptr;
    BODY* body_gme = nullptr;
    SPAposition origin_point(0.0, 0.0, 0.0);
    SPAposition cylinder_point(8.0, 0.0, 0.0);
    SPAposition xpt(0, 0, 1);
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 3.0, nullptr, body_acis, nullptr);
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 3.0, nullptr, body_gme, nullptr);
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(body_acis, face_list_acis);
    get_faces(body_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    // edge偏移距离
    double offsetdistance = 1e-7;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    face_acis = (FACE*)face_list_acis[1];
    face_gme = (FACE*)face_list_gme[1];
    coedge_acis = face_acis->loop()->start();
    coedge_gme = face_gme->loop()->start();
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 位于Plane面上的ellipse的偏置测试,偏置距离为负数
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_2_4) {
    BODY* body_acis = nullptr;
    BODY* body_gme = nullptr;
    SPAposition origin_point(0.0, 0.0, 0.0);
    SPAposition cylinder_point(8.0, 0.0, 0.0);
    SPAposition xpt(0, 0, 1);
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 3.0, nullptr, body_acis, nullptr);
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 3.0, nullptr, body_gme, nullptr);
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(body_acis, face_list_acis);
    get_faces(body_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    // edge偏移距离
    double offsetdistance = -1.0;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    face_acis = (FACE*)face_list_acis[1];
    face_gme = (FACE*)face_list_gme[1];
    coedge_acis = face_acis->loop()->start();
    coedge_gme = face_gme->loop()->start();
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 圆柱体cone面上的ellipse正常偏置，偏置距离为5.0
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_3_1) {
    BODY* body_acis = nullptr;
    BODY* body_gme = nullptr;
    SPAposition origin_point(0.0, 0.0, 0.0);
    SPAposition cylinder_point(0.0, 0.0, 8.0);
    SPAposition xpt(0, 0, 1);
    // 建立圆柱体
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 3.0, nullptr, body_acis, nullptr);
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 3.0, nullptr, body_gme, nullptr);
    // 获取coedge，建立空edge指针用以返回结果
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(body_acis, face_list_acis);
    get_faces(body_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    // edge偏移距离
    double offsetdistance = 5.0;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    face_acis = (FACE*)face_list_acis[0];
    face_gme = (FACE*)face_list_gme[0];
    coedge_acis = face_acis->loop()->start();
    coedge_gme = face_gme->loop()->start();
    // 测试接口
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 圆柱体cone面上的ellipse正常偏置，偏置距离为1e-5
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_3_2) {
    BODY* body_acis = nullptr;
    BODY* body_gme = nullptr;
    SPAposition origin_point(0.0, 0.0, 0.0);
    SPAposition cylinder_point(0.0, 0.0, 8.0);
    SPAposition xpt(0, 0, 1);
    // 建立圆柱体
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 3.0, nullptr, body_acis, nullptr);
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 3.0, nullptr, body_gme, nullptr);
    // 获取coedge，建立空edge指针用以返回结果
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(body_acis, face_list_acis);
    get_faces(body_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    // edge偏移距离
    double offsetdistance = 1e-5;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    face_acis = (FACE*)face_list_acis[0];
    face_gme = (FACE*)face_list_gme[0];
    coedge_acis = face_acis->loop()->start();
    coedge_gme = face_gme->loop()->start();
    // 测试接口
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 圆柱体cone面上的ellipse正常偏置，偏置距离为1e-7
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_3_3) {
    BODY* body_acis = nullptr;
    BODY* body_gme = nullptr;
    SPAposition origin_point(0.0, 0.0, 0.0);
    SPAposition cylinder_point(0.0, 0.0, 8.0);
    SPAposition xpt(0, 0, 1);
    // 建立圆柱体
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 3.0, nullptr, body_acis, nullptr);
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 3.0, nullptr, body_gme, nullptr);
    // 获取coedge，建立空edge指针用以返回结果
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(body_acis, face_list_acis);
    get_faces(body_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    // edge偏移距离
    double offsetdistance = 1e-7;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    face_acis = (FACE*)face_list_acis[0];
    face_gme = (FACE*)face_list_gme[0];
    coedge_acis = face_acis->loop()->start();
    coedge_gme = face_gme->loop()->start();
    // 测试接口
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 圆柱体cone面上的ellipse正常偏置，偏置距离为-1.0
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_3_4) {
    BODY* body_acis = nullptr;
    BODY* body_gme = nullptr;
    SPAposition origin_point(0.0, 0.0, 0.0);
    SPAposition cylinder_point(0.0, 0.0, 8.0);
    SPAposition xpt(0, 0, 1);
    // 建立圆柱体
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 3.0, nullptr, body_acis, nullptr);
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 3.0, nullptr, body_gme, nullptr);
    // 获取coedge，建立空edge指针用以返回结果
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(body_acis, face_list_acis);
    get_faces(body_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    // edge偏移距离
    double offsetdistance = -1.0;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    face_acis = (FACE*)face_list_acis[0];
    face_gme = (FACE*)face_list_gme[0];
    coedge_acis = face_acis->loop()->start();
    coedge_gme = face_gme->loop()->start();
    // 测试接口
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 圆锥体cone面上的ellipse正常偏置，偏置距离为5.0
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_3_5) {
    BODY* body_acis = nullptr;
    BODY* body_gme = nullptr;
    SPAposition origin_point(0.0, 0.0, 0.0);
    SPAposition cylinder_point(8.0, 0.0, 0.0);
    SPAposition xpt(0, 0, 1);
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 0.0, &xpt, body_acis, nullptr);
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 0.0, &xpt, body_gme, nullptr);
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(body_acis, face_list_acis);
    get_faces(body_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    double offsetdistance = 5.0;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    face_acis = (FACE*)face_list_acis[0];
    face_gme = (FACE*)face_list_gme[0];
    coedge_acis = face_acis->loop()->start();
    coedge_gme = face_gme->loop()->start();
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 圆锥体cone面上的ellipse正常偏置，偏置距离为1e-5
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_3_6) {
    BODY* body_acis = nullptr;
    BODY* body_gme = nullptr;
    SPAposition origin_point(0.0, 0.0, 0.0);
    SPAposition cylinder_point(8.0, 0.0, 0.0);
    SPAposition xpt(0, 0, 1);
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 0.0, &xpt, body_acis, nullptr);
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 0.0, &xpt, body_gme, nullptr);
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(body_acis, face_list_acis);
    get_faces(body_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    double offsetdistance = 1e-5;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    face_acis = (FACE*)face_list_acis[0];
    face_gme = (FACE*)face_list_gme[0];
    coedge_acis = face_acis->loop()->start();
    coedge_gme = face_gme->loop()->start();
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 圆锥体cone面上的ellipse正常偏置，偏置距离为1e-7
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_3_7) {
    BODY* body_acis = nullptr;
    BODY* body_gme = nullptr;
    SPAposition origin_point(0.0, 0.0, 0.0);
    SPAposition cylinder_point(8.0, 0.0, 0.0);
    SPAposition xpt(0, 0, 1);
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 0.0, &xpt, body_acis, nullptr);
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 0.0, &xpt, body_gme, nullptr);
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(body_acis, face_list_acis);
    get_faces(body_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    double offsetdistance = 1e-7;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    face_acis = (FACE*)face_list_acis[0];
    face_gme = (FACE*)face_list_gme[0];
    coedge_acis = face_acis->loop()->start();
    coedge_gme = face_gme->loop()->start();
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 圆锥体cone面上的ellipse正常偏置，偏置距离为-1.0
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_3_8) {
    BODY* body_acis = nullptr;
    BODY* body_gme = nullptr;
    SPAposition origin_point(0.0, 0.0, 0.0);
    SPAposition cylinder_point(8.0, 0.0, 0.0);
    SPAposition xpt(0, 0, 1);
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 0.0, &xpt, body_acis, nullptr);
    api_solid_cylinder_cone(origin_point, cylinder_point, 3.0, 3.0, 0.0, &xpt, body_gme, nullptr);
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(body_acis, face_list_acis);
    get_faces(body_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    double offsetdistance = -1.0;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    face_acis = (FACE*)face_list_acis[0];
    face_gme = (FACE*)face_list_gme[0];
    coedge_acis = face_acis->loop()->start();
    coedge_gme = face_gme->loop()->start();
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 圆柱体的斜截面的cone面上的ellipse正常偏置，偏置距离为5.0
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_3_9) {
    SPAposition origin1 = SPAposition(0.0, 0.0, 0.0);
    SPAposition origin2 = SPAposition(0.0, 0.0, 0.0);
    // 构造斜圆柱所用的点
    SPAposition topcenter1 = SPAposition(0.0, 0.0, 8.0);
    SPAposition topcenter2 = SPAposition(0.0, 0.0, 8.0);
    // 构造face所用的点
    SPAposition facepoint1 = SPAposition(-4.0, -4.0, 8.0);
    SPAvector facenormal1 = SPAvector(1.0, 1.0, 3.0);
    SPAposition facepoint2 = SPAposition(-4.0, -4.0, 8.0);
    SPAvector facenormal2 = SPAvector(1.0, 1.0, 3.0);
    // BODY
    BODY* offsetbody_acis = nullptr;  // 待偏移斜切圆柱 / 原圆柱
    BODY* offsetbody_gme = nullptr;   // 待偏移斜切圆柱 / 原圆柱
    BODY* block1 = nullptr;           // 原矩形
    BODY* block2 = nullptr;
    // FACE
    FACE* face1 = nullptr;
    FACE* face2 = nullptr;
    api_solid_cylinder_cone(origin1, topcenter1, 3.0, 3.0, 3.0, nullptr, offsetbody_acis);
    api_solid_cylinder_cone(origin2, topcenter2, 3.0, 3.0, 3.0, nullptr, offsetbody_gme);
    // 构造切圆柱的face
    api_face_plane(facepoint1, 20, 20, &facenormal1, face1);
    api_face_plane(facepoint2, 20, 20, &facenormal2, face2);
    // 通过扫掠将这个面拉成矩形体
    api_extrude_planar_faces(face1, 10.0, block1, nullptr, nullptr);
    api_extrude_planar_faces(face2, 10.0, block2, nullptr, nullptr);
    // 通过布尔差斜切圆柱
    api_subtract(block1, offsetbody_acis);
    api_subtract(block2, offsetbody_gme);
    // 偏移测试
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(offsetbody_acis, face_list_acis);
    get_faces(offsetbody_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    // edge偏移距离
    double offsetdistance = 5.0;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    face_acis = (FACE*)face_list_acis[1];
    face_gme = (FACE*)face_list_gme[1];
    coedge_acis = face_acis->loop()->start();
    coedge_gme = face_gme->loop()->start();
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 圆柱体的斜截面的cone面上的ellipse正常偏置，偏置距离为1e-5
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_3_10) {
    SPAposition origin1 = SPAposition(0.0, 0.0, 0.0);
    SPAposition origin2 = SPAposition(0.0, 0.0, 0.0);
    // 构造斜圆柱所用的点
    SPAposition topcenter1 = SPAposition(0.0, 0.0, 8.0);
    SPAposition topcenter2 = SPAposition(0.0, 0.0, 8.0);
    // 构造face所用的点
    SPAposition facepoint1 = SPAposition(-4.0, -4.0, 8.0);
    SPAvector facenormal1 = SPAvector(1.0, 1.0, 3.0);
    SPAposition facepoint2 = SPAposition(-4.0, -4.0, 8.0);
    SPAvector facenormal2 = SPAvector(1.0, 1.0, 3.0);
    // BODY
    BODY* offsetbody_acis = nullptr;  // 待偏移斜切圆柱 / 原圆柱
    BODY* offsetbody_gme = nullptr;   // 待偏移斜切圆柱 / 原圆柱
    BODY* block1 = nullptr;           // 原矩形
    BODY* block2 = nullptr;
    // FACE
    FACE* face1 = nullptr;
    FACE* face2 = nullptr;
    api_solid_cylinder_cone(origin1, topcenter1, 3.0, 3.0, 3.0, nullptr, offsetbody_acis);
    api_solid_cylinder_cone(origin2, topcenter2, 3.0, 3.0, 3.0, nullptr, offsetbody_gme);
    // 构造切圆柱的face
    api_face_plane(facepoint1, 20, 20, &facenormal1, face1);
    api_face_plane(facepoint2, 20, 20, &facenormal2, face2);
    // 通过扫掠将这个面拉成矩形体
    api_extrude_planar_faces(face1, 10.0, block1, nullptr, nullptr);
    api_extrude_planar_faces(face2, 10.0, block2, nullptr, nullptr);
    // 通过布尔差斜切圆柱
    api_subtract(block1, offsetbody_acis);
    api_subtract(block2, offsetbody_gme);
    // 偏移测试
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(offsetbody_acis, face_list_acis);
    get_faces(offsetbody_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    // edge偏移距离
    double offsetdistance = 1e-5;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    face_acis = (FACE*)face_list_acis[1];
    face_gme = (FACE*)face_list_gme[1];
    coedge_acis = face_acis->loop()->start();
    coedge_gme = face_gme->loop()->start();
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 圆柱体的斜截面的cone面上的ellipse正常偏置，偏置距离为1e-7
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_3_11) {
    SPAposition origin1 = SPAposition(0.0, 0.0, 0.0);
    SPAposition origin2 = SPAposition(0.0, 0.0, 0.0);
    // 构造斜圆柱所用的点
    SPAposition topcenter1 = SPAposition(0.0, 0.0, 8.0);
    SPAposition topcenter2 = SPAposition(0.0, 0.0, 8.0);
    // 构造face所用的点
    SPAposition facepoint1 = SPAposition(-4.0, -4.0, 8.0);
    SPAvector facenormal1 = SPAvector(1.0, 1.0, 3.0);
    SPAposition facepoint2 = SPAposition(-4.0, -4.0, 8.0);
    SPAvector facenormal2 = SPAvector(1.0, 1.0, 3.0);
    // BODY
    BODY* offsetbody_acis = nullptr;  // 待偏移斜切圆柱 / 原圆柱
    BODY* offsetbody_gme = nullptr;   // 待偏移斜切圆柱 / 原圆柱
    BODY* block1 = nullptr;           // 原矩形
    BODY* block2 = nullptr;
    // FACE
    FACE* face1 = nullptr;
    FACE* face2 = nullptr;
    api_solid_cylinder_cone(origin1, topcenter1, 3.0, 3.0, 3.0, nullptr, offsetbody_acis);
    api_solid_cylinder_cone(origin2, topcenter2, 3.0, 3.0, 3.0, nullptr, offsetbody_gme);
    // 构造切圆柱的face
    api_face_plane(facepoint1, 20, 20, &facenormal1, face1);
    api_face_plane(facepoint2, 20, 20, &facenormal2, face2);
    // 通过扫掠将这个面拉成矩形体
    api_extrude_planar_faces(face1, 10.0, block1, nullptr, nullptr);
    api_extrude_planar_faces(face2, 10.0, block2, nullptr, nullptr);
    // 通过布尔差斜切圆柱
    api_subtract(block1, offsetbody_acis);
    api_subtract(block2, offsetbody_gme);
    // 偏移测试
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(offsetbody_acis, face_list_acis);
    get_faces(offsetbody_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    // edge偏移距离
    double offsetdistance = 1e-7;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    face_acis = (FACE*)face_list_acis[1];
    face_gme = (FACE*)face_list_gme[1];
    coedge_acis = face_acis->loop()->start();
    coedge_gme = face_gme->loop()->start();
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 圆柱体的斜截面的cone面上的ellipse正常偏置，偏置距离为-1.0
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_3_12) {
    SPAposition origin1 = SPAposition(0.0, 0.0, 0.0);
    SPAposition origin2 = SPAposition(0.0, 0.0, 0.0);
    // 构造斜圆柱所用的点
    SPAposition topcenter1 = SPAposition(0.0, 0.0, 8.0);
    SPAposition topcenter2 = SPAposition(0.0, 0.0, 8.0);
    // 构造face所用的点
    SPAposition facepoint1 = SPAposition(-4.0, -4.0, 8.0);
    SPAvector facenormal1 = SPAvector(1.0, 1.0, 3.0);
    SPAposition facepoint2 = SPAposition(-4.0, -4.0, 8.0);
    SPAvector facenormal2 = SPAvector(1.0, 1.0, 3.0);
    // BODY
    BODY* offsetbody_acis = nullptr;  // 待偏移斜切圆柱 / 原圆柱
    BODY* offsetbody_gme = nullptr;   // 待偏移斜切圆柱 / 原圆柱
    BODY* block1 = nullptr;           // 原矩形
    BODY* block2 = nullptr;
    // FACE
    FACE* face1 = nullptr;
    FACE* face2 = nullptr;
    api_solid_cylinder_cone(origin1, topcenter1, 3.0, 3.0, 3.0, nullptr, offsetbody_acis);
    api_solid_cylinder_cone(origin2, topcenter2, 3.0, 3.0, 3.0, nullptr, offsetbody_gme);
    // 构造切圆柱的face
    api_face_plane(facepoint1, 20, 20, &facenormal1, face1);
    api_face_plane(facepoint2, 20, 20, &facenormal2, face2);
    // 通过扫掠将这个面拉成矩形体
    api_extrude_planar_faces(face1, 10.0, block1, nullptr, nullptr);
    api_extrude_planar_faces(face2, 10.0, block2, nullptr, nullptr);
    // 通过布尔差斜切圆柱
    api_subtract(block1, offsetbody_acis);
    api_subtract(block2, offsetbody_gme);
    // 偏移测试
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(offsetbody_acis, face_list_acis);
    get_faces(offsetbody_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    // edge偏移距离
    double offsetdistance = -1.0;
    COEDGE* coedge_acis = nullptr;
    COEDGE* coedge_gme = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    face_acis = (FACE*)face_list_acis[1];
    face_gme = (FACE*)face_list_gme[1];
    coedge_acis = face_acis->loop()->start();
    coedge_gme = face_gme->loop()->start();
    api_offset_face_edge(coedge_acis, offsetdistance, edge_acis);
    gme_api_offset_face_edge(coedge_gme, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 测试参数域长度为PI/2的ellipse,偏置距离为5.0
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_3_13) {
    BODY* offset_body = nullptr;
    BODY* block1 = nullptr;
    BODY* cylinder1 = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    api_solid_block(SPAposition(0.0, 0.0, 0.0), SPAposition(10, 20, 20), offset_body);
    api_solid_block(SPAposition(0.0, 0.0, 0.0), SPAposition(20, 20, 10), block1);
    api_solid_cylinder_cone(SPAposition(10, 0, 10), SPAposition(10, 20, 10), 10, 10, 10, nullptr, cylinder1);
    api_unite(block1, offset_body);
    api_unite(cylinder1, offset_body);
    double offsetdistance = 5.0;
    // 曲面上的ellipse线，参数域长度PI/2
    COEDGE* given_coedge = offset_body->lump()->shell()->face()->loop()->start()->next();
    api_offset_face_edge(given_coedge, offsetdistance, edge_acis);
    gme_api_offset_face_edge(given_coedge, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 测试参数域长度为PI/2的ellipse,偏置距离为1e-5
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_3_14) {
    BODY* offset_body = nullptr;
    BODY* block1 = nullptr;
    BODY* cylinder1 = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    api_solid_block(SPAposition(0.0, 0.0, 0.0), SPAposition(10, 20, 20), offset_body);
    api_solid_block(SPAposition(0.0, 0.0, 0.0), SPAposition(20, 20, 10), block1);
    api_solid_cylinder_cone(SPAposition(10, 0, 10), SPAposition(10, 20, 10), 10, 10, 10, nullptr, cylinder1);
    api_unite(block1, offset_body);
    api_unite(cylinder1, offset_body);
    double offsetdistance = 1e-5;
    // 曲面上的ellipse线，参数域长度PI/2
    COEDGE* given_coedge = offset_body->lump()->shell()->face()->loop()->start()->next();
    api_offset_face_edge(given_coedge, offsetdistance, edge_acis);
    gme_api_offset_face_edge(given_coedge, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 测试参数域长度为PI/2的ellipse,偏置距离为1e-7
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_3_15) {
    BODY* offset_body = nullptr;
    BODY* block1 = nullptr;
    BODY* cylinder1 = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    api_solid_block(SPAposition(0.0, 0.0, 0.0), SPAposition(10, 20, 20), offset_body);
    api_solid_block(SPAposition(0.0, 0.0, 0.0), SPAposition(20, 20, 10), block1);
    api_solid_cylinder_cone(SPAposition(10, 0, 10), SPAposition(10, 20, 10), 10, 10, 10, nullptr, cylinder1);
    api_unite(block1, offset_body);
    api_unite(cylinder1, offset_body);
    double offsetdistance = 1e-7;
    // 曲面上的ellipse线，参数域长度PI/2
    COEDGE* given_coedge = offset_body->lump()->shell()->face()->loop()->start()->next();
    api_offset_face_edge(given_coedge, offsetdistance, edge_acis);
    gme_api_offset_face_edge(given_coedge, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 测试参数域长度为PI/2的ellipse,偏置距离为-1.0
 */
TEST_F(OfstApiTest, gme_api_offset_face_edge_3_16) {
    BODY* offset_body = nullptr;
    BODY* block1 = nullptr;
    BODY* cylinder1 = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    api_solid_block(SPAposition(0.0, 0.0, 0.0), SPAposition(10, 20, 20), offset_body);
    api_solid_block(SPAposition(0.0, 0.0, 0.0), SPAposition(20, 20, 10), block1);
    api_solid_cylinder_cone(SPAposition(10, 0, 10), SPAposition(10, 20, 10), 10, 10, 10, nullptr, cylinder1);
    api_unite(block1, offset_body);
    api_unite(cylinder1, offset_body);
    double offsetdistance = -1.0;
    // 曲面上的ellipse线，参数域长度PI/2
    COEDGE* given_coedge = offset_body->lump()->shell()->face()->loop()->start()->next();
    api_offset_face_edge(given_coedge, offsetdistance, edge_acis);
    gme_api_offset_face_edge(given_coedge, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}

/**
 * @brief 测试圆锥体的斜截面上的cone面上的edge偏置，偏置结果为intcurve类型edge
 */
/*
TEST_F(OfstApiTest, gme_api_offset_face_edge_3_17) {
    SPAposition origin1 = SPAposition(0.0, 0.0, 0.0);
    SPAposition topcenter1 = SPAposition(0.0, 0.0, 8.0);
    SPAposition facepoint1 = SPAposition(-4.0, -4.0, 8.0);
    SPAvector facenormal1 = SPAvector(1.0, 1.0, 3.0);
    BODY* offsetbody = nullptr;  // 待偏移斜切圆柱 / 原圆柱
    BODY* block1 = nullptr;      // 原矩形
    FACE* face1 = nullptr;
    api_solid_cylinder_cone(origin1, topcenter1, 3.0, 3.0, 0.0, nullptr, offsetbody);
    // 构造切圆柱的face
    api_face_plane(facepoint1, 20, 20, &facenormal1, face1);
    // 通过扫掠将这个面拉成矩形体
    api_extrude_planar_faces(face1, 10.0, block1, nullptr, nullptr);
    // 通过布尔差斜切圆柱
    api_subtract(block1, offsetbody);
    // 偏移测试
    ENTITY_LIST face_list;
    get_faces(offsetbody, face_list);
    face_list.init();
    FACE* face_temp = nullptr;
    // edge偏移距离
    double offsetdistance = 2.0;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    face_temp = (FACE*)face_list[1];
    COEDGE* given_coedge = face_temp->loop()->start();
    api_offset_face_edge(given_coedge, offsetdistance, edge_acis);
    gme_api_offset_face_edge(given_coedge, offsetdistance, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme, false));
}
*/
/**
 * @brief intcurve类型摆动面和cone面求交结果intcurve的偏置
 * @todo: 问题应该出在布尔后的face的法向量
 */
/*
TEST_F(OfstApiTest, gme_api_offset_face_edge_4_1) {
    BODY* block1;
    BODY* cylinder1;
    BODY* wiggle1;
    SPAposition origin = SPAposition(0.0, 0.0, 0.0);
    SPAposition topcenter = SPAposition(0.0, 0.0, 10.0);
    SPAposition blockpoint1 = SPAposition(-10.0, -10.0, 0.0);
    SPAposition blockpoint2 = SPAposition(10.0, 10.0, 4.0);
    FACE* face1;
    EDGE* edge1;
    EDGE* edge_acis;
    EDGE* edge_gme;
    COEDGE* coedge1;
    api_solid_cylinder_cone(origin, topcenter, 3.0, 3.0, 3.0, nullptr, cylinder1);
    api_wiggle(10, 10, 4, -1, -1, -1, -1, true, wiggle1);
    api_solid_block(blockpoint1, blockpoint2, block1);
    api_subtract(wiggle1, cylinder1);
    ENTITY_LIST face_list;
    get_faces(cylinder1, face_list);
    face_list.init();
    face1 = (FACE*)face_list[0];  // 该body的face列表的第0个为intcurve所在的面
    coedge1 = face1->loop()->start();
    api_offset_face_edge(coedge1, 5.0, edge_acis);
    gme_api_offset_face_edge(coedge1, 5.0, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme));
}
*/

/**
 * @brief intcurve类型,三阶bezier曲线偏置后自交的偏置结果
 */
/*
TEST_F(OfstApiTest, gme_api_offset_face_edge_4_2) {
    EDGE* edge1 = nullptr;
    api_curve_bezier({0.0, 0.0, 0.0}, {1.0, 6.0, 0.0}, {2.0, 6.0, 0.0}, {3.0, 0.0, 0.0}, edge1);
    sweep_options options;
    BODY* new_body = nullptr;
    api_sweep_with_options(edge1, {0, 0, -3}, &options, new_body);
    ENTITY_LIST coedge_list;
    get_coedges(new_body, coedge_list);
    EDGE* acis_edge = nullptr;
    EDGE* gme_edge = nullptr;
    api_offset_face_edge((COEDGE*)coedge_list[2], -1.0, acis_edge);
    gme_api_offset_face_edge((COEDGE*)coedge_list[2], -1.0, gme_edge);
    EXPECT_TRUE(same_edge(acis_edge, gme_edge));
}
*/
/**
 * @brief helix类型,螺旋面上的螺旋线偏置结果
 */
/*
TEST_F(OfstApiTest, gme_api_offset_face_edge_5_1) {
    EDGE* acis_helix_line = nullptr;
    BODY* acis_body = nullptr;
    EDGE* edge_acis = nullptr;
    EDGE* edge_gme = nullptr;
    SPAposition point1 = SPAposition(0.0, 0.0, 0.0);
    SPAposition point2 = SPAposition(0.0, 0.0, 20.0);
    SPAvector start_dir = SPAvector(1.0, 0.0, 0.0);
    SPAvector vec = SPAvector(0.0, 0.0, 3.0);
    sweep_options options;
    api_edge_helix(point1, point2, start_dir, 3.0, 10.0, TRUE, acis_helix_line);
    api_sweep_with_options(acis_helix_line, vec, &options, acis_body);
    ENTITY_LIST acis_face_list;
    get_faces(acis_body, acis_face_list);
    acis_face_list.init();
    FACE* acis_face = (FACE*)acis_face_list[0];
    COEDGE* given_coedge = acis_face->loop()->start()->next()->next();
    api_offset_face_edge(given_coedge, 5.0, edge_acis);
    gme_api_offset_face_edge(given_coedge, 5.0, edge_gme);
    EdgeCreateCoedge(edge_acis, edge_gme);
    EXPECT_TRUE(same_edge(edge_acis, edge_gme, false));
}
*/
/**
 * @brief Plane面的单个闭合LOOP的偏置，偏置距离为-1.0
 */
/*
TEST_F(OfstApiTest, gme_api_offset_face_loop_1_1) {
    BODY* block_acis = nullptr;
    FACE* face_acis = nullptr;
    BODY* outbody_acis = nullptr;
    BODY* outbody_gme = nullptr;
    api_solid_block(SPAposition(0.0, 0.0, 0.0), SPAposition(10.0, 10.0, 10.0), block_acis);
    ENTITY_LIST face_list_acis;
    get_faces(block_acis, face_list_acis);
    face_list_acis.init();
    face_acis = (FACE*)face_list_acis[0];
    api_offset_face_loops(face_acis, -1.0, outbody_acis);
    gme_api_offset_face_loops(face_acis, -1.0, outbody_gme);
    EXPECT_TRUE(same_body(outbody_acis, outbody_gme));
}
*/
/**
 * @brief Plane面的单个闭合LOOP的偏置，偏置距离为-1e-5
 */
/*
TEST_F(OfstApiTest, gme_api_offset_face_loop_1_2) {
    BODY* block_acis = nullptr;
    FACE* face_acis = nullptr;
    BODY* outbody_acis = nullptr;
    BODY* outbody_gme = nullptr;
    api_solid_block(SPAposition(0.0, 0.0, 0.0), SPAposition(10.0, 10.0, 10.0), block_acis);
    ENTITY_LIST face_list_acis;
    get_faces(block_acis, face_list_acis);
    face_list_acis.init();
    face_acis = (FACE*)face_list_acis[0];
    api_offset_face_loops(face_acis, -1e-5, outbody_acis);
    gme_api_offset_face_loops(face_acis, -1e-5, outbody_gme);
    EXPECT_TRUE(same_body(outbody_acis, outbody_gme));
}
*/
/**
*@brief Plane面的单个闭合LOOP的偏置，偏置距离为 - 1e-7 * /
/*
TEST_F(OfstApiTest, gme_api_offset_face_loop_1_3) {
    BODY* block_acis = nullptr;
    FACE* face_acis = nullptr;
    BODY* outbody_acis = nullptr;
    BODY* outbody_gme = nullptr;
    api_solid_block(SPAposition(0.0, 0.0, 0.0), SPAposition(10.0, 10.0, 10.0), block_acis);
    ENTITY_LIST face_list_acis;
    get_faces(block_acis, face_list_acis);
    face_list_acis.init();
    face_acis = (FACE*)face_list_acis[0];
    api_offset_face_loops(face_acis, -(1e-7), outbody_acis);
    gme_api_offset_face_loops(face_acis, -(1e-7), outbody_gme);
    EXPECT_TRUE(same_body(outbody_acis, outbody_gme));
}
*/

/**
 * @brief CONE面的两个闭合LOOP的偏置，偏置距离为-1.0
 */
TEST_F(OfstApiTest, gme_api_offset_face_loop_2_1) {
    BODY* cylinder_acis = nullptr;
    FACE* face_acis = nullptr;
    BODY* outbody_acis = nullptr;
    BODY* outbody_gme = nullptr;
    api_solid_cylinder_cone(SPAposition(0.0, 0.0, 0.0), SPAposition(0.0, 0.0, 10.0), 5.0, 5.0, 5.0, nullptr, cylinder_acis);
    ENTITY_LIST face_list_acis;
    get_faces(cylinder_acis, face_list_acis);
    face_list_acis.init();
    face_acis = (FACE*)face_list_acis[0];
    api_offset_face_loops(face_acis, -1.0, outbody_acis);
    gme_api_offset_face_loops(face_acis, -1.0, outbody_gme);
    EXPECT_TRUE(same_body(outbody_acis, outbody_gme));
}

/**
 * @brief CONE面的两个闭合LOOP的偏置，偏置距离为-1e-5
 */
TEST_F(OfstApiTest, gme_api_offset_face_loop_2_2) {
    BODY* cylinder_acis = nullptr;
    FACE* face_acis = nullptr;
    BODY* outbody_acis = nullptr;
    BODY* outbody_gme = nullptr;
    api_solid_cylinder_cone(SPAposition(0.0, 0.0, 0.0), SPAposition(0.0, 0.0, 10.0), 5.0, 5.0, 5.0, nullptr, cylinder_acis);
    ENTITY_LIST face_list_acis;
    get_faces(cylinder_acis, face_list_acis);
    face_list_acis.init();
    face_acis = (FACE*)face_list_acis[0];
    api_offset_face_loops(face_acis, -(1e-5), outbody_acis);
    gme_api_offset_face_loops(face_acis, -(1e-5), outbody_gme);
    EXPECT_TRUE(same_body(outbody_acis, outbody_gme));
}

/**
 * @brief CONE面的两个闭合LOOP的偏置，偏置距离为-1e-7
 * @todo: 测试异常，待改善
 */
/*
TEST_F(OfstApiTest, gme_api_offset_face_loop_2_3) {
    BODY* cylinder_acis = nullptr;
    FACE* face_acis = nullptr;
    BODY* outbody_acis = nullptr;
    BODY* outbody_gme = nullptr;
    api_solid_cylinder_cone(SPAposition(0.0, 0.0, 0.0), SPAposition(0.0, 0.0, 10.0), 5.0, 5.0, 5.0, nullptr, cylinder_acis);
    ENTITY_LIST face_list_acis;
    get_faces(cylinder_acis, face_list_acis);
    face_list_acis.init();
    face_acis = (FACE*)face_list_acis[0];
    api_offset_face_loops(face_acis, -(1e-7), outbody_acis);
    gme_api_offset_face_loops(face_acis, -(1e-7), outbody_gme);
    EXPECT_TRUE(same_body(outbody_acis, outbody_gme));
}
*/

/**
 * @brief PLANE面的ELLIPSE闭合LOOP的偏置，偏置距离为-1.0
 */
/*
TEST_F(OfstApiTest, gme_api_offset_face_loop_3_1) {
    BODY* cylinder_acis = nullptr;
    BODY* cylinder_gme = nullptr;
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    BODY* outbody_acis = nullptr;
    BODY* outbody_gme = nullptr;
    api_solid_cylinder_cone(SPAposition(0.0, 0.0, 0.0), SPAposition(0.0, 0.0, 10.0), 5.0, 5.0, 5.0, nullptr, cylinder_acis);
    api_solid_cylinder_cone(SPAposition(0.0, 0.0, 0.0), SPAposition(0.0, 0.0, 10.0), 5.0, 5.0, 5.0, nullptr, cylinder_gme);
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(cylinder_acis, face_list_acis);
    get_faces(cylinder_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    face_acis = (FACE*)face_list_acis[1];
    face_gme = (FACE*)face_list_gme[1];
    api_offset_face_loops(face_acis, -1.0, outbody_acis);
    gme_api_offset_face_loops(face_gme, -1.0, outbody_gme);
    EXPECT_TRUE(same_body(outbody_acis, outbody_gme));
}
*/

/**
 * @brief PLANE面的ELLIPSE闭合LOOP的偏置，偏置距离为-1e-5
 *  * @todo: 测试异常，待改善
 */
/*
TEST_F(OfstApiTest, gme_api_offset_face_loop_3_2) {
    BODY* cylinder_acis = nullptr;
    BODY* cylinder_gme = nullptr;
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    BODY* outbody_acis = nullptr;
    BODY* outbody_gme = nullptr;
    api_solid_cylinder_cone(SPAposition(0.0, 0.0, 0.0), SPAposition(0.0, 0.0, 10.0), 5.0, 5.0, 5.0, nullptr, cylinder_acis);
    api_solid_cylinder_cone(SPAposition(0.0, 0.0, 0.0), SPAposition(0.0, 0.0, 10.0), 5.0, 5.0, 5.0, nullptr, cylinder_gme);
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(cylinder_acis, face_list_acis);
    get_faces(cylinder_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    face_acis = (FACE*)face_list_acis[1];
    face_gme = (FACE*)face_list_gme[1];
    api_offset_face_loops(face_acis, -(1e-5), outbody_acis);
    gme_api_offset_face_loops(face_gme, -(1e-5), outbody_gme);
    EXPECT_TRUE(same_body(outbody_acis, outbody_gme));
}
*/

/**
 * @brief PLANE面的ELLIPSE闭合LOOP的偏置，偏置距离为-1e-7
 *  * @todo: 测试异常，待改善
 */
/*
TEST_F(OfstApiTest, gme_api_offset_face_loop_3_3) {
    BODY* cylinder_acis = nullptr;
    BODY* cylinder_gme = nullptr;
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    BODY* outbody_acis = nullptr;
    BODY* outbody_gme = nullptr;
    api_solid_cylinder_cone(SPAposition(0.0, 0.0, 0.0), SPAposition(0.0, 0.0, 10.0), 5.0, 5.0, 5.0, nullptr, cylinder_acis);
    api_solid_cylinder_cone(SPAposition(0.0, 0.0, 0.0), SPAposition(0.0, 0.0, 10.0), 5.0, 5.0, 5.0, nullptr, cylinder_gme);
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(cylinder_acis, face_list_acis);
    get_faces(cylinder_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    face_acis = (FACE*)face_list_acis[1];
    face_gme = (FACE*)face_list_gme[1];
    api_offset_face_loops(face_acis, -(1e-7), outbody_acis);
    gme_api_offset_face_loops(face_gme, -(1e-7), outbody_gme);
    EXPECT_TRUE(same_body(outbody_acis, outbody_gme));
}
*/

/**
 * @brief 圆台体cone面的FACE的LOOP进行偏置，偏置距离为-1.0
 */
TEST_F(OfstApiTest, gme_api_offset_face_loop_4_1) {
    BODY* cylinder_acis = nullptr;
    BODY* cylinder_gme = nullptr;
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    BODY* outbody_acis = nullptr;
    BODY* outbody_gme = nullptr;
    api_solid_cylinder_cone(SPAposition(0.0, 0.0, 0.0), SPAposition(0.0, 0.0, 10.0), 5.0, 5.0, 2.0, nullptr, cylinder_acis);
    api_solid_cylinder_cone(SPAposition(0.0, 0.0, 0.0), SPAposition(0.0, 0.0, 10.0), 5.0, 5.0, 2.0, nullptr, cylinder_gme);
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(cylinder_acis, face_list_acis);
    get_faces(cylinder_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    face_acis = (FACE*)face_list_acis[0];
    face_gme = (FACE*)face_list_gme[0];
    api_offset_face_loops(face_acis, -1.0, outbody_acis);
    gme_api_offset_face_loops(face_gme, -1.0, outbody_gme);
    EXPECT_TRUE(same_body(outbody_acis, outbody_gme));
}

/**
 * @brief 圆台体cone面的FACE的LOOP进行偏置，偏置距离为-1e-5
 */
TEST_F(OfstApiTest, gme_api_offset_face_loop_4_2) {
    BODY* cylinder_acis = nullptr;
    BODY* cylinder_gme = nullptr;
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    BODY* outbody_acis = nullptr;
    BODY* outbody_gme = nullptr;
    api_solid_cylinder_cone(SPAposition(0.0, 0.0, 0.0), SPAposition(0.0, 0.0, 10.0), 5.0, 5.0, 2.0, nullptr, cylinder_acis);
    api_solid_cylinder_cone(SPAposition(0.0, 0.0, 0.0), SPAposition(0.0, 0.0, 10.0), 5.0, 5.0, 2.0, nullptr, cylinder_gme);
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(cylinder_acis, face_list_acis);
    get_faces(cylinder_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    face_acis = (FACE*)face_list_acis[0];
    face_gme = (FACE*)face_list_gme[0];
    api_offset_face_loops(face_acis, -1e-5, outbody_acis);
    gme_api_offset_face_loops(face_gme, -1e-5, outbody_gme);
    EXPECT_TRUE(same_body(outbody_acis, outbody_gme));
}

/**
 * @brief 圆台体cone面的FACE的LOOP进行偏置，偏置距离为-1e-7
 */
/*
TEST_F(OfstApiTest, gme_api_offset_face_loop_4_3) {
    BODY* cylinder_acis = nullptr;
    BODY* cylinder_gme = nullptr;
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    BODY* outbody_acis = nullptr;
    BODY* outbody_gme = nullptr;
    api_solid_cylinder_cone(SPAposition(0.0, 0.0, 0.0), SPAposition(0.0, 0.0, 10.0), 5.0, 5.0, 2.0, nullptr, cylinder_acis);
    api_solid_cylinder_cone(SPAposition(0.0, 0.0, 0.0), SPAposition(0.0, 0.0, 10.0), 5.0, 5.0, 2.0, nullptr, cylinder_gme);
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(cylinder_acis, face_list_acis);
    get_faces(cylinder_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    face_acis = (FACE*)face_list_acis[0];
    face_gme = (FACE*)face_list_gme[0];
    api_offset_face_loops(face_acis, -1e-7, outbody_acis);
    gme_api_offset_face_loops(face_gme, -1e-7, outbody_gme);
    EXPECT_TRUE(same_body(outbody_acis, outbody_gme));
}
*/

/**
 * @brief 摆动面的LOOP进行偏置，偏置距离为-1.0
// @todo: edge_on_face的内部偏置精度误差导致测试不通过
*/
/*
TEST_F(OfstApiTest, gme_api_offset_face_loop_5_1) {
    BODY* wiggle_acis = nullptr;
    ENTITY* wiggle_gme;
    // BODY* wiggle_gme = nullptr;
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    BODY* outbody_acis = nullptr;
    BODY* outbody_gme = nullptr;
    api_wiggle(10, 10, 10, 1, 2, 2, 0, true, wiggle_acis);
    api_deep_down_copy_entity(wiggle_acis, wiggle_gme);
    // api_wiggle(10, 10, 10, 1, 2, 2, 0, true, wiggle_gme);
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(wiggle_acis, face_list_acis);
    get_faces(wiggle_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    face_acis = (FACE*)face_list_acis[0];
    face_gme = (FACE*)face_list_gme[0];
    api_offset_face_loops(face_acis, -1.0, outbody_acis);
    gme_api_offset_face_loops(face_gme, -1.0, outbody_gme);
    EXPECT_TRUE(same_body(outbody_acis, outbody_gme));
}
*/

/**
 * @brief 摆动面（参数为-1-1-1-1）的LOOP进行偏置，偏置距离为-1.0
 */
/*
TEST_F(OfstApiTest, gme_api_offset_face_loop_5_2) {
    BODY* wiggle_acis = nullptr;
    ENTITY* wiggle_gme;
    // BODY* wiggle_gme = nullptr;
    FACE* face_acis = nullptr;
    FACE* face_gme = nullptr;
    BODY* outbody_acis = nullptr;
    BODY* outbody_gme = nullptr;
    api_wiggle(10, 10, 4, -1, -1, -1, -1, true, wiggle_acis);
    api_deep_down_copy_entity(wiggle_acis, wiggle_gme);
    ENTITY_LIST face_list_acis;
    ENTITY_LIST face_list_gme;
    get_faces(wiggle_acis, face_list_acis);
    get_faces(wiggle_gme, face_list_gme);
    face_list_acis.init();
    face_list_gme.init();
    face_acis = (FACE*)face_list_acis[0];
    face_gme = (FACE*)face_list_gme[0];
    api_offset_face_loops(face_acis, -1.0, outbody_acis);
    gme_api_offset_face_loops(face_gme, -1.0, outbody_gme);
    EXPECT_TRUE(same_body(outbody_acis, outbody_gme));
}
*/

/**
 * @brief 米老鼠头形状PLANE面上的LOOP进行偏置，偏置距离为-0.5
 */
/*
TEST_F(OfstApiTest, gme_api_offset_face_loop_6_1) {
    BODY* body1 = nullptr;
    BODY* body2 = nullptr;
    BODY* origin_body = nullptr;
    FACE* face1 = nullptr;
    FACE* face2 = nullptr;
    FACE* origin_face = nullptr;
    BODY* outbody_acis = nullptr;
    BODY* outbody_gme = nullptr;
    api_make_planar_disk(SPAposition(4.0, 4.0, 0.0), SPAunit_vector(0.0, 0.0, 1.0), 2.0, face1);
    api_make_planar_disk(SPAposition(-4.0, 4.0, 0.0), SPAunit_vector(0.0, 0.0, 1.0), 2.0, face2);
    api_make_planar_disk(SPAposition(0.0, 0.0, 0.0), SPAunit_vector(0.0, 0.0, 1.0), 5.0, origin_face);
    api_sheet_from_ff(1, &face1, body1);
    api_sheet_from_ff(1, &face2, body2);
    api_sheet_from_ff(1, &origin_face, origin_body);
    api_unite(body1, origin_body);
    api_unite(body2, origin_body);
    ENTITY_LIST face_list;
    get_faces(origin_body, face_list);
    face_list.init();
    FACE* offset_face_acis = (FACE*)face_list[0];
    FACE* offset_face_gme = (FACE*)face_list[0];
    api_offset_face_loops(offset_face_acis, -0.5, outbody_acis);
    gme_api_offset_face_loops(offset_face_gme, -0.5, outbody_gme);
    EXPECT_TRUE(same_body(outbody_acis, outbody_gme));
}
*/

/**
 * @brief 在球体上进行偏置，测试是否满足近似测地线算法
 */
TEST_F(OfstApiTest, gme_api_offset_face_loop_7_1) {
    BODY* block1 = nullptr;
    BODY* sphere1 = nullptr;
    BODY* acis_body = nullptr;
    BODY* gme_body = nullptr;
    api_solid_block(SPAposition(50.0, 50.0, 0.0), SPAposition(-50.0, -50.0, -50.0), block1);
    api_solid_sphere(SPAposition(0.0, 0.0, 0.0), 40.0, sphere1);
    api_subtract(block1, sphere1);
    ENTITY* acis_entity = nullptr;
    ENTITY* gme_entity = nullptr;
    api_deep_down_copy_entity(sphere1, acis_entity);
    api_deep_down_copy_entity(sphere1, gme_entity);
    acis_body = (BODY*)acis_entity;
    gme_body = (BODY*)gme_entity;
    FACE* acis_face = acis_body->lump()->shell()->face()->next();
    FACE* gme_face = gme_body->lump()->shell()->face()->next();
    BODY* acis_outbody = nullptr;
    BODY* gme_outbody = nullptr;

    api_offset_face_loops(acis_face, -8, acis_outbody);
    gme_api_offset_face_loops(acis_face, -8, gme_outbody);
    EXPECT_TRUE(same_body(acis_outbody, gme_outbody));
}

/**
 * @brief 在圆环体上进行偏置，测试是否满足近似测地线算法
 * */
/*
TEST_F(OfstApiTest, gme_api_offset_face_loop_7_2) {
    BODY* block1 = nullptr;
    BODY* tour1 = nullptr;
    BODY* acis_body = nullptr;
    BODY* gme_body = nullptr;
    api_solid_block(SPAposition(50.0, 50.0, 0.0), SPAposition(-50.0, -50.0, -50.0), block1);
    api_solid_torus(SPAposition(0.0, 0.0, 0.0), 20, 10, tour1);
    api_subtract(block1, tour1);
    ENTITY* acis_entity = nullptr;
    ENTITY* gme_entity = nullptr;
    api_deep_down_copy_entity(tour1, acis_entity);
    api_deep_down_copy_entity(tour1, gme_entity);
    acis_body = (BODY*)acis_entity;
    gme_body = (BODY*)gme_entity;
    FACE* acis_face = acis_body->lump()->shell()->face()->next();
    FACE* gme_face = gme_body->lump()->shell()->face()->next();
    BODY* acis_outbody = nullptr;
    BODY* gme_outbody = nullptr;

    api_offset_face_loops(acis_face, -8, acis_outbody);
    gme_api_offset_face_loops(acis_face, -8, gme_outbody);
    EXPECT_TRUE(same_body(acis_outbody, gme_outbody));
}
*/

/**
 * @brief 正向偏移圆柱体圆柱面
 */
TEST_F(OfstApiTest, gme_api_offset_face_1) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
    api_offset_face(f, 3, acis_offset_face, NULL, NULL);
    EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    API_END
}
/**
 * @brief 正向偏移圆柱体平面
 */
TEST_F(OfstApiTest, gme_api_offset_face_2) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    f = (FACE*)face_list.next();
    gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
    api_offset_face(f, 3, acis_offset_face, NULL, NULL);
    EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    API_END
}
/**
 * @brief 同时正向偏移圆柱体平面、圆柱面
 */
TEST_F(OfstApiTest, gme_api_offset_face_3) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移圆柱体圆柱面
 */
TEST_F(OfstApiTest, gme_api_offset_face_4) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
    api_offset_face(f, -3, acis_offset_face, NULL, NULL);
    EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    API_END
}
/**
 * @brief 负向（容差内）偏移圆柱体平面
 */
TEST_F(OfstApiTest, gme_api_offset_face_5) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    f = (FACE*)face_list.next();
    gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
    api_offset_face(f, -3, acis_offset_face, NULL, NULL);
    EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    API_END
}
/**
 * @brief 同时负向（容差内）偏移圆柱体平面、圆柱面
 */
TEST_F(OfstApiTest, gme_api_offset_face_6) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
        api_offset_face(f, -3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    }
    API_END
}
/**
 * @brief 正向偏移一个正方体上的面
 */
TEST_F(OfstApiTest, gme_api_offset_face_7) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移2个正方体上的面
 */
TEST_F(OfstApiTest, gme_api_offset_face_8) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移3个正方体上的面
 */
TEST_F(OfstApiTest, gme_api_offset_face_9) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移4个正方体上的面
 */
TEST_F(OfstApiTest, gme_api_offset_face_10) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移5个正方体上的面
 */
TEST_F(OfstApiTest, gme_api_offset_face_11) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 正向偏移6个正方体上的面
 */
TEST_F(OfstApiTest, gme_api_offset_face_12) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移一个正方体上的面
 */
TEST_F(OfstApiTest, gme_api_offset_face_13) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
        api_offset_face(f, -3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移2个正方体上的面
 */
TEST_F(OfstApiTest, gme_api_offset_face_14) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
        api_offset_face(f, -3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移3个正方体上的面
 */
TEST_F(OfstApiTest, gme_api_offset_face_15) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
        api_offset_face(f, -3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移4个正方体上的面
 */
TEST_F(OfstApiTest, gme_api_offset_face_16) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
        api_offset_face(f, -3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移5个正方体上的面
 */
TEST_F(OfstApiTest, gme_api_offset_face_17) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
        api_offset_face(f, -3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移6个正方体上的面
 */
TEST_F(OfstApiTest, gme_api_offset_face_18) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
        api_offset_face(f, -3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 正向偏移圆锥体圆锥面
 */
TEST_F(OfstApiTest, gme_api_offset_face_19) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 0, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
    api_offset_face(f, 3, acis_offset_face, NULL, NULL);
    EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    API_END
}
/**
 * @brief 正向偏移圆锥体底平面
 */
TEST_F(OfstApiTest, gme_api_offset_face_20) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 0, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    f = (FACE*)face_list.next();
    gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
    api_offset_face(f, 3, acis_offset_face, NULL, NULL);
    EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    API_END
}
/**
 * @brief 同时正向偏移圆锥体底平面、圆锥面
 */
TEST_F(OfstApiTest, gme_api_offset_face_21) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 0, NULL, body);
    get_faces(body, face_list);
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移圆锥体圆锥面
 */
TEST_F(OfstApiTest, gme_api_offset_face_22) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 0, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
    api_offset_face(f, -3, acis_offset_face, NULL, NULL);
    EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    API_END
}
/**
 * @brief 负向（容差内）偏移圆锥体底平面
 */
TEST_F(OfstApiTest, gme_api_offset_face_23) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 0, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    f = (FACE*)face_list.next();
    gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
    api_offset_face(f, -3, acis_offset_face, NULL, NULL);
    EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    API_END
}
/**
 * @brief 同时负向（容差内）偏移圆锥体底平面、圆锥面
 */
TEST_F(OfstApiTest, gme_api_offset_face_24) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 0, NULL, body);
    get_faces(body, face_list);
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
        api_offset_face(f, -3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体单个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_25) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体两个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_26) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体三个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_27) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体四个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_28) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体5个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_29) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体6个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_30) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体7个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_31) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体8个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_32) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体9个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_33) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体10个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_34) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体1个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_35) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体2个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_36) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体3个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_37) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体4个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_38) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体5个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_39) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体6个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_40) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体7个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_41) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体8个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_42) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体9个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_43) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 9) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体10个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_44) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 负向（容差外）偏移圆柱体圆柱面
 */
TEST_F(OfstApiTest, gme_api_offset_face_45) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    gme_api_offset_face(f, -5, gme_offset_face, NULL, NULL);
    api_offset_face(f, -5, acis_offset_face, NULL, NULL);
    EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    API_END
}
/**
 * @brief 同时负向（容差外）偏移圆柱体平面、圆柱面
 */
TEST_F(OfstApiTest, gme_api_offset_face_46) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求体10个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_47) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体单个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_48) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        api_offset_face(f, 2, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体两个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_49) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        api_offset_face(f, 2, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体三个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_50) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        api_offset_face(f, 2, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体四个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_51) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        api_offset_face(f, 2, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体5个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_52) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        api_offset_face(f, 2, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体6个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_53) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        api_offset_face(f, 2, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体7个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_54) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        api_offset_face(f, 2, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体8个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_55) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        api_offset_face(f, 2, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体9个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_56) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        api_offset_face(f, 2, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体10个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_57) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        api_offset_face(f, 2, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体1个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_58) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体2个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_59) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体3个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_60) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体4个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_61) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体5个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_62) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体6个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_63) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体7个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_64) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体8个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_65) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体9个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_66) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 9) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆锥体求并体单个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_67) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体两个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_68) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体三个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_69) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体四个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_70) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体5个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_71) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体6个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_72) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体7个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_73) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体8个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_74) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体9个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_75) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体10个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_76) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体1个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_77) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体2个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_78) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体3个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_79) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体4个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_80) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体5个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_81) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体6个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_82) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体7个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_83) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体8个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_84) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体9个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_85) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 9) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体10个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_86) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 负向（容差外）偏移圆柱体圆柱面
 */
TEST_F(OfstApiTest, gme_api_offset_face_87) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    gme_api_offset_face(f, -5, gme_offset_face, NULL, NULL);
    api_offset_face(f, -5, acis_offset_face, NULL, NULL);
    EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    API_END
}
/**
 * @brief 同时负向（容差外）偏移圆柱体平面、圆柱面
 */
TEST_F(OfstApiTest, gme_api_offset_face_88) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求体10个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_89) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体单个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_90) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        api_offset_face(f, 2, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体两个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_91) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        api_offset_face(f, 2, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体三个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_92) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        api_offset_face(f, 2, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体四个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_93) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        api_offset_face(f, 2, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体5个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_94) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        api_offset_face(f, 2, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体6个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_95) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        api_offset_face(f, 2, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体7个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_96) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        api_offset_face(f, 2, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体8个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_97) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        api_offset_face(f, 2, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体9个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_98) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        api_offset_face(f, 2, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体10个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_99) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        api_offset_face(f, 2, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体1个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_101) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体2个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_102) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体3个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_103) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体4个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_104) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体5个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_105) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体6个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_106) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体7个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_107) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体8个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_108) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体9个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_109) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 9) break;
    }
    API_END
}
/**
 * @brief 正向偏移球面
 */
TEST_F(OfstApiTest, gme_api_offset_face_110) {
    API_BEGIN
    BODY* body1;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        api_offset_face(f, 3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球面
 */
TEST_F(OfstApiTest, gme_api_offset_face_111) {
    API_BEGIN
    BODY* body1;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
        api_offset_face(f, -3, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    }
    API_END
}
/**
 * @brief 负向（容差外）偏移球面
 */
TEST_F(OfstApiTest, gme_api_offset_face_112) {
    API_BEGIN
    BODY* body1;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -10, gme_offset_face, NULL, NULL);
        api_offset_face(f, -10, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求并体单个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_113) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        api_offset_face(f, 5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求并体两个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_114) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        api_offset_face(f, 5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求并体三个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_115) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        api_offset_face(f, 5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求并体4个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_116) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        api_offset_face(f, 5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求并体5个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_117) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        api_offset_face(f, 5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求并体单个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_118) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求并体两个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_119) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求并体三个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_120) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求并体4个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_121) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求并体5个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_122) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 正向偏移柠檬体面
 */
TEST_F(OfstApiTest, gme_api_offset_face_123) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        api_offset_face(f, 5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移柠檬体面
 */
TEST_F(OfstApiTest, gme_api_offset_face_124) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求交体单个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_125) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        api_offset_face(f, 5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求交体两个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_126) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        api_offset_face(f, 5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求交体三个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_127) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        api_offset_face(f, 5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求交体4个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_128) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        api_offset_face(f, 5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求交体5个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_129) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        api_offset_face(f, 5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求交体单个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_130) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求交体两个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_131) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求交体三个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_132) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求交体4个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_133) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求交体5个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_134) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 正向偏移柠檬体与圆柱体求交一个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_135) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        api_offset_face(f, 5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移柠檬体与圆柱体求交两个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_136) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        api_offset_face(f, 5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移柠檬体与圆柱体求交三个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_137) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        api_offset_face(f, 5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移柠檬体与圆柱体求交四个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_138) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        api_offset_face(f, 5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移柠檬体与圆柱体求交五个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_139) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        api_offset_face(f, 5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移柠檬体与圆柱体求交一个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_140) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移柠檬体与圆柱体求交两个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_141) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移柠檬体与圆柱体求交三个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_142) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移柠檬体与圆柱体求交四个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_143) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移柠檬体与圆柱体求交五个面
 */
TEST_F(OfstApiTest, gme_api_offset_face_144) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -1.5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
        i++;
        if(i == 5) break;
    }
    API_END
}




class Bs3ApiTest : public ::testing ::Test {
  private:
    int level;

  protected:
    void SetUp() override { level = initialize_acis(); }

    void TearDown() override { terminate_acis(level); }

    // 辅助函数，仅测试用,为没有coedge的edge生成coedge
    static void EdgeCreateCoedge(EDGE* edge_acis, EDGE* edge_gme) {
        COEDGE* coedge_acis_test1 = ACIS_NEW COEDGE(edge_acis, 0, nullptr, nullptr);
        COEDGE* coedge_gme_test1 = ACIS_NEW COEDGE(edge_gme, 0, nullptr, nullptr);
        COEDGE* coedge_acis_test2 = ACIS_NEW COEDGE(edge_acis, 1, coedge_acis_test1, coedge_acis_test1);
        COEDGE* coedge_gme_test2 = ACIS_NEW COEDGE(edge_gme, 1, coedge_gme_test1, coedge_gme_test1);
        coedge_acis_test1->set_next(coedge_acis_test2);
        coedge_acis_test1->set_previous(coedge_acis_test2);
        coedge_gme_test1->set_next(coedge_gme_test2);
        coedge_gme_test1->set_previous(coedge_gme_test2);
        edge_acis->set_coedge(coedge_acis_test1);
        edge_gme->set_coedge(coedge_gme_test1);
    }
};
class AcisGmeTest : public ::testing ::Test {
  private:
    int level;

  protected:
    void SetUp() override { level = initialize_acis(); }

    void TearDown() override { terminate_acis(level); }

    // 辅助函数，仅测试用,为没有coedge的edge生成coedge
    static void EdgeCreateCoedge(EDGE* edge_acis, EDGE* edge_gme) {
        COEDGE* coedge_acis_test1 = ACIS_NEW COEDGE(edge_acis, 0, nullptr, nullptr);
        COEDGE* coedge_gme_test1 = ACIS_NEW COEDGE(edge_gme, 0, nullptr, nullptr);
        COEDGE* coedge_acis_test2 = ACIS_NEW COEDGE(edge_acis, 1, coedge_acis_test1, coedge_acis_test1);
        COEDGE* coedge_gme_test2 = ACIS_NEW COEDGE(edge_gme, 1, coedge_gme_test1, coedge_gme_test1);
        coedge_acis_test1->set_next(coedge_acis_test2);
        coedge_acis_test1->set_previous(coedge_acis_test2);
        coedge_gme_test1->set_next(coedge_gme_test2);
        coedge_gme_test1->set_previous(coedge_gme_test2);
        edge_acis->set_coedge(coedge_acis_test1);
        edge_gme->set_coedge(coedge_gme_test1);
    }
};
/**
 * @brief 样条面偏移
 */
TEST_F(Bs3ApiTest, gme_api_offset_face_145) {
    API_BEGIN
    BODY* body1;
    const SPAinterval u_range = SPAinterval(-5, 5);
    const SPAinterval v_range = SPAinterval(-5, 5);
    const double weights[] = {1, 1, 1, 1};
    const SPAposition ctrlpts[] = {SPAposition(9, 0, 9), SPAposition(0, 0, 0), SPAposition(9, 9, 0), SPAposition(0, 10, 10)};
    const double knots_u[] = {0, 0, 2, 2};
    const double knots_v[] = {0, 0, 1, 1};
    auto form = bs3_surf_unknown_ends;
    int g = 0;
    int& pole_u = g;
    int& pole_v = g;
    bs3_surface appr = bs3_surface_from_ctrlpts(1, true, form, pole_u, 2, 2, true, form, pole_v, 3, ctrlpts, weights, 0, 4, knots_u, 6, knots_v, 0);
    spline this_spline = spline(appr);
    api_make_spline(this_spline, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    insanity_list* ilist = NULL;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        
        //api_offset_face(f, 5, acis_offset_face, NULL, NULL);
        //EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    }
    API_END
}
/**
 * @brief 对比测试
 */
TEST_F(AcisGmeTest, gme_api_offset_face_1) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);

    API_END
}
/**
 * @brief 正向偏移圆柱体平面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_2) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    f = (FACE*)face_list.next();
    gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);

    API_END
}
/**
 * @brief 同时正向偏移圆柱体平面、圆柱面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_3) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移圆柱体圆柱面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_4) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);

    API_END
}
/**
 * @brief 负向（容差内）偏移圆柱体平面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_5) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    f = (FACE*)face_list.next();
    gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);

    API_END
}
/**
 * @brief 同时负向（容差内）偏移圆柱体平面、圆柱面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_6) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
    }
    API_END
}
/**
 * @brief 正向偏移一个正方体上的面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_7) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);

        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移2个正方体上的面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_8) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);

        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移3个正方体上的面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_9) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移4个正方体上的面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_10) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);

        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移5个正方体上的面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_11) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 正向偏移6个正方体上的面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_12) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移一个正方体上的面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_13) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移2个正方体上的面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_14) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移3个正方体上的面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_15) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移4个正方体上的面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_16) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移5个正方体上的面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_17) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移6个正方体上的面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_18) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 正向偏移圆锥体圆锥面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_19) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 0, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
    API_END
}
/**
 * @brief 正向偏移圆锥体底平面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_20) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 0, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    f = (FACE*)face_list.next();
    gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
    API_END
}
/**
 * @brief 同时正向偏移圆锥体底平面、圆锥面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_21) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 0, NULL, body);
    get_faces(body, face_list);
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移圆锥体圆锥面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_22) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 0, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
    API_END
}
/**
 * @brief 负向（容差内）偏移圆锥体底平面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_23) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 0, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    f = (FACE*)face_list.next();
    gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
    API_END
}
/**
 * @brief 同时负向（容差内）偏移圆锥体底平面、圆锥面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_24) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 0, NULL, body);
    get_faces(body, face_list);
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体单个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_25) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体两个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_26) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体三个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_27) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体四个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_28) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体5个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_29) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体6个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_30) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体7个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_31) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体8个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_32) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体9个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_33) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体10个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_34) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体1个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_35) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体2个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_36) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体3个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_37) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体4个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_38) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体5个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_39) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体6个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_40) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体7个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_41) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体8个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_42) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体9个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_43) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 9) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体10个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_44) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 负向（容差外）偏移圆柱体圆柱面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_45) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    gme_api_offset_face(f, -5, gme_offset_face, NULL, NULL);
    API_END
}
/**
 * @brief 同时负向（容差外）偏移圆柱体平面、圆柱面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_46) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求体10个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_47) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体单个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_48) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体两个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_49) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体三个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_50) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体四个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_51) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体5个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_52) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体6个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_53) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体7个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_54) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体8个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_55) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体9个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_56) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体10个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_57) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体1个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_58) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体2个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_59) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);

        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体3个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_60) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);

        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体4个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_61) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体5个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_62) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体6个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_63) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体7个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_64) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体8个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_65) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体9个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_66) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 9) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆锥体求并体单个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_67) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体两个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_68) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体三个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_69) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体四个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_70) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体5个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_71) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体6个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_72) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体7个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_73) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体8个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_74) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体9个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_75) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体10个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_76) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体1个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_77) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体2个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_78) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);

        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体3个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_79) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体4个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_80) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体5个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_81) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体6个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_82) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体7个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_83) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体8个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_84) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体9个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_85) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);

        i++;
        if(i == 9) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体10个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_86) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 负向（容差外）偏移圆柱体圆柱面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_87) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    gme_api_offset_face(f, -5, gme_offset_face, NULL, NULL);
    API_END
}
/**
 * @brief 同时负向（容差外）偏移圆柱体平面、圆柱面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_88) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -5, gme_offset_face, NULL, NULL);
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求体10个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_89) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);

        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体单个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_90) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体两个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_91) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体三个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_92) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体四个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_93) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体5个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_94) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体6个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_95) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体7个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_96) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体8个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_97) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体9个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_98) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);

        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体10个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_99) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体1个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_101) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体2个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_102) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体3个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_103) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体4个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_104) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体5个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_105) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体6个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_106) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体7个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_107) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体8个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_108) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体9个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_109) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 9) break;
    }
    API_END
}
/**
 * @brief 正向偏移球面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_110) {
    API_BEGIN
    BODY* body1;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 3, gme_offset_face, NULL, NULL);
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_111) {
    API_BEGIN
    BODY* body1;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -3, gme_offset_face, NULL, NULL);
    }
    API_END
}
/**
 * @brief 负向（容差外）偏移球面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_112) {
    API_BEGIN
    BODY* body1;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -10, gme_offset_face, NULL, NULL);
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求并体单个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_113) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求并体两个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_114) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求并体三个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_115) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求并体4个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_116) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求并体5个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_117) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求并体单个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_118) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求并体两个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_119) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求并体三个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_120) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求并体4个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_121) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求并体5个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_122) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 正向偏移柠檬体面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_123) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移柠檬体面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_124) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -5, gme_offset_face, NULL, NULL);
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求交体单个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_125) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求交体两个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_126) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求交体三个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_127) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求交体4个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_128) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求交体5个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_129) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求交体单个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_130) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求交体两个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_131) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求交体三个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_132) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求交体4个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_133) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求交体5个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_134) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 正向偏移柠檬体与圆柱体求交一个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_135) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移柠檬体与圆柱体求交两个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_136) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移柠檬体与圆柱体求交三个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_137) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移柠檬体与圆柱体求交四个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_138) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移柠檬体与圆柱体求交五个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_139) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移柠檬体与圆柱体求交一个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_140) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);

        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移柠檬体与圆柱体求交两个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_141) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移柠檬体与圆柱体求交三个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_142) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移柠檬体与圆柱体求交四个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_143) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移柠檬体与圆柱体求交五个面
 */
TEST_F(AcisGmeTest, gme_api_offset_face_144) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        gme_api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}

TEST_F(AcisGmeTest, api_offset_face_1) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    api_offset_face(f, 3, gme_offset_face, NULL, NULL);

    API_END
}
/**
 * @brief 正向偏移圆柱体平面
 */
TEST_F(AcisGmeTest, api_offset_face_2) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    f = (FACE*)face_list.next();
    api_offset_face(f, 3, gme_offset_face, NULL, NULL);

    API_END
}
/**
 * @brief 同时正向偏移圆柱体平面、圆柱面
 */
TEST_F(AcisGmeTest, api_offset_face_3) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移圆柱体圆柱面
 */
TEST_F(AcisGmeTest, api_offset_face_4) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    api_offset_face(f, -3, gme_offset_face, NULL, NULL);

    API_END
}
/**
 * @brief 负向（容差内）偏移圆柱体平面
 */
TEST_F(AcisGmeTest, api_offset_face_5) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    f = (FACE*)face_list.next();
    api_offset_face(f, -3, gme_offset_face, NULL, NULL);

    API_END
}
/**
 * @brief 同时负向（容差内）偏移圆柱体平面、圆柱面
 */
TEST_F(AcisGmeTest, api_offset_face_6) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -3, gme_offset_face, NULL, NULL);
    }
    API_END
}
/**
 * @brief 正向偏移一个正方体上的面
 */
TEST_F(AcisGmeTest, api_offset_face_7) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);

        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移2个正方体上的面
 */
TEST_F(AcisGmeTest, api_offset_face_8) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);

        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移3个正方体上的面
 */
TEST_F(AcisGmeTest, api_offset_face_9) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移4个正方体上的面
 */
TEST_F(AcisGmeTest, api_offset_face_10) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);

        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移5个正方体上的面
 */
TEST_F(AcisGmeTest, api_offset_face_11) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 正向偏移6个正方体上的面
 */
TEST_F(AcisGmeTest, api_offset_face_12) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移一个正方体上的面
 */
TEST_F(AcisGmeTest, api_offset_face_13) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        api_offset_face(f, -3, gme_offset_face, NULL, NULL);
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移2个正方体上的面
 */
TEST_F(AcisGmeTest, api_offset_face_14) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        api_offset_face(f, -3, gme_offset_face, NULL, NULL);
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移3个正方体上的面
 */
TEST_F(AcisGmeTest, api_offset_face_15) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        api_offset_face(f, -3, gme_offset_face, NULL, NULL);
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移4个正方体上的面
 */
TEST_F(AcisGmeTest, api_offset_face_16) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        api_offset_face(f, -3, gme_offset_face, NULL, NULL);
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移5个正方体上的面
 */
TEST_F(AcisGmeTest, api_offset_face_17) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        api_offset_face(f, -3, gme_offset_face, NULL, NULL);
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移6个正方体上的面
 */
TEST_F(AcisGmeTest, api_offset_face_18) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body);
    get_faces(body, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        i++;
        api_offset_face(f, -3, gme_offset_face, NULL, NULL);
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 正向偏移圆锥体圆锥面
 */
TEST_F(AcisGmeTest, api_offset_face_19) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 0, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    api_offset_face(f, 3, gme_offset_face, NULL, NULL);
    API_END
}
/**
 * @brief 正向偏移圆锥体底平面
 */
TEST_F(AcisGmeTest, api_offset_face_20) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 0, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    f = (FACE*)face_list.next();
    api_offset_face(f, 3, gme_offset_face, NULL, NULL);
    API_END
}
/**
 * @brief 同时正向偏移圆锥体底平面、圆锥面
 */
TEST_F(AcisGmeTest, api_offset_face_21) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 0, NULL, body);
    get_faces(body, face_list);
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移圆锥体圆锥面
 */
TEST_F(AcisGmeTest, api_offset_face_22) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 0, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    api_offset_face(f, -3, gme_offset_face, NULL, NULL);
    API_END
}
/**
 * @brief 负向（容差内）偏移圆锥体底平面
 */
TEST_F(AcisGmeTest, api_offset_face_23) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 0, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    f = (FACE*)face_list.next();
    api_offset_face(f, -3, gme_offset_face, NULL, NULL);
    API_END
}
/**
 * @brief 同时负向（容差内）偏移圆锥体底平面、圆锥面
 */
TEST_F(AcisGmeTest, api_offset_face_24) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 0, NULL, body);
    get_faces(body, face_list);
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -3, gme_offset_face, NULL, NULL);
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体单个面
 */
TEST_F(AcisGmeTest, api_offset_face_25) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体两个面
 */
TEST_F(AcisGmeTest, api_offset_face_26) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体三个面
 */
TEST_F(AcisGmeTest, api_offset_face_27) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体四个面
 */
TEST_F(AcisGmeTest, api_offset_face_28) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体5个面
 */
TEST_F(AcisGmeTest, api_offset_face_29) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体6个面
 */
TEST_F(AcisGmeTest, api_offset_face_30) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体7个面
 */
TEST_F(AcisGmeTest, api_offset_face_31) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体8个面
 */
TEST_F(AcisGmeTest, api_offset_face_32) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体9个面
 */
TEST_F(AcisGmeTest, api_offset_face_33) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体10个面
 */
TEST_F(AcisGmeTest, api_offset_face_34) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体1个面
 */
TEST_F(AcisGmeTest, api_offset_face_35) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体2个面
 */
TEST_F(AcisGmeTest, api_offset_face_36) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体3个面
 */
TEST_F(AcisGmeTest, api_offset_face_37) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体4个面
 */
TEST_F(AcisGmeTest, api_offset_face_38) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体5个面
 */
TEST_F(AcisGmeTest, api_offset_face_39) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体6个面
 */
TEST_F(AcisGmeTest, api_offset_face_40) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体7个面
 */
TEST_F(AcisGmeTest, api_offset_face_41) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体8个面
 */
TEST_F(AcisGmeTest, api_offset_face_42) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体9个面
 */
TEST_F(AcisGmeTest, api_offset_face_43) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 9) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体10个面
 */
TEST_F(AcisGmeTest, api_offset_face_44) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 负向（容差外）偏移圆柱体圆柱面
 */
TEST_F(AcisGmeTest, api_offset_face_45) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    api_offset_face(f, -5, gme_offset_face, NULL, NULL);
    API_END
}
/**
 * @brief 同时负向（容差外）偏移圆柱体平面、圆柱面
 */
TEST_F(AcisGmeTest, api_offset_face_46) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -5, gme_offset_face, NULL, NULL);
        api_offset_face(f, -5, acis_offset_face, NULL, NULL);
        EXPECT_TRUE(same_entity(gme_offset_face, acis_offset_face, false));
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求体10个面
 */
TEST_F(AcisGmeTest, api_offset_face_47) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体单个面
 */
TEST_F(AcisGmeTest, api_offset_face_48) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体两个面
 */
TEST_F(AcisGmeTest, api_offset_face_49) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体三个面
 */
TEST_F(AcisGmeTest, api_offset_face_50) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体四个面
 */
TEST_F(AcisGmeTest, api_offset_face_51) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体5个面
 */
TEST_F(AcisGmeTest, api_offset_face_52) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体6个面
 */
TEST_F(AcisGmeTest, api_offset_face_53) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体7个面
 */
TEST_F(AcisGmeTest, api_offset_face_54) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体8个面
 */
TEST_F(AcisGmeTest, api_offset_face_55) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体9个面
 */
TEST_F(AcisGmeTest, api_offset_face_56) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体10个面
 */
TEST_F(AcisGmeTest, api_offset_face_57) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体1个面
 */
TEST_F(AcisGmeTest, api_offset_face_58) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体2个面
 */
TEST_F(AcisGmeTest, api_offset_face_59) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);

        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体3个面
 */
TEST_F(AcisGmeTest, api_offset_face_60) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);

        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体4个面
 */
TEST_F(AcisGmeTest, api_offset_face_61) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体5个面
 */
TEST_F(AcisGmeTest, api_offset_face_62) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体6个面
 */
TEST_F(AcisGmeTest, api_offset_face_63) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体7个面
 */
TEST_F(AcisGmeTest, api_offset_face_64) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体8个面
 */
TEST_F(AcisGmeTest, api_offset_face_65) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体9个面
 */
TEST_F(AcisGmeTest, api_offset_face_66) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 9) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆锥体求并体单个面
 */
TEST_F(AcisGmeTest, api_offset_face_67) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体两个面
 */
TEST_F(AcisGmeTest, api_offset_face_68) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体三个面
 */
TEST_F(AcisGmeTest, api_offset_face_69) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体四个面
 */
TEST_F(AcisGmeTest, api_offset_face_70) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体5个面
 */
TEST_F(AcisGmeTest, api_offset_face_71) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体6个面
 */
TEST_F(AcisGmeTest, api_offset_face_72) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体7个面
 */
TEST_F(AcisGmeTest, api_offset_face_73) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体8个面
 */
TEST_F(AcisGmeTest, api_offset_face_74) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体9个面
 */
TEST_F(AcisGmeTest, api_offset_face_75) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求并体10个面
 */
TEST_F(AcisGmeTest, api_offset_face_76) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体1个面
 */
TEST_F(AcisGmeTest, api_offset_face_77) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体2个面
 */
TEST_F(AcisGmeTest, api_offset_face_78) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);

        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体3个面
 */
TEST_F(AcisGmeTest, api_offset_face_79) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体4个面
 */
TEST_F(AcisGmeTest, api_offset_face_80) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体5个面
 */
TEST_F(AcisGmeTest, api_offset_face_81) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体6个面
 */
TEST_F(AcisGmeTest, api_offset_face_82) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体7个面
 */
TEST_F(AcisGmeTest, api_offset_face_83) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体8个面
 */
TEST_F(AcisGmeTest, api_offset_face_84) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体9个面
 */
TEST_F(AcisGmeTest, api_offset_face_85) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);

        i++;
        if(i == 9) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求并体10个面
 */
TEST_F(AcisGmeTest, api_offset_face_86) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 负向（容差外）偏移圆柱体圆柱面
 */
TEST_F(AcisGmeTest, api_offset_face_87) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    f = (FACE*)face_list.next();
    api_offset_face(f, -5, gme_offset_face, NULL, NULL);
    API_END
}
/**
 * @brief 同时负向（容差外）偏移圆柱体平面、圆柱面
 */
TEST_F(AcisGmeTest, api_offset_face_88) {
    API_BEGIN
    BODY* body;
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    gme_api_solid_cylinder_cone(SPAposition(0, 0, 0), SPAposition(0, 0, 10), 5, 5, 5, NULL, body);
    get_faces(body, face_list);
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -5, gme_offset_face, NULL, NULL);
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求体10个面
 */
TEST_F(AcisGmeTest, api_offset_face_89) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);

        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体单个面
 */
TEST_F(AcisGmeTest, api_offset_face_90) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体两个面
 */
TEST_F(AcisGmeTest, api_offset_face_91) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体三个面
 */
TEST_F(AcisGmeTest, api_offset_face_92) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体四个面
 */
TEST_F(AcisGmeTest, api_offset_face_93) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体5个面
 */
TEST_F(AcisGmeTest, api_offset_face_94) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体6个面
 */
TEST_F(AcisGmeTest, api_offset_face_95) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体7个面
 */
TEST_F(AcisGmeTest, api_offset_face_96) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体8个面
 */
TEST_F(AcisGmeTest, api_offset_face_97) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体9个面
 */
TEST_F(AcisGmeTest, api_offset_face_98) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 2, gme_offset_face, NULL, NULL);

        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 正向偏移正方体圆柱体求交体10个面
 */
TEST_F(AcisGmeTest, api_offset_face_99) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 2, gme_offset_face, NULL, NULL);
        i++;
        if(i == 10) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体1个面
 */
TEST_F(AcisGmeTest, api_offset_face_101) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体2个面
 */
TEST_F(AcisGmeTest, api_offset_face_102) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体3个面
 */
TEST_F(AcisGmeTest, api_offset_face_103) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体4个面
 */
TEST_F(AcisGmeTest, api_offset_face_104) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体5个面
 */
TEST_F(AcisGmeTest, api_offset_face_105) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体6个面
 */
TEST_F(AcisGmeTest, api_offset_face_106) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 6) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体7个面
 */
TEST_F(AcisGmeTest, api_offset_face_107) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 7) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体8个面
 */
TEST_F(AcisGmeTest, api_offset_face_108) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 8) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移正方体圆柱体求交体9个面
 */
TEST_F(AcisGmeTest, api_offset_face_109) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_block(SPAposition(0, 0, 0), SPAposition(10, 10, 10), body1);
    gme_api_solid_cylinder_cone(SPAposition(5, 5, -5), SPAposition(5, 5, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 9) break;
    }
    API_END
}
/**
 * @brief 正向偏移球面
 */
TEST_F(AcisGmeTest, api_offset_face_110) {
    API_BEGIN
    BODY* body1;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 3, gme_offset_face, NULL, NULL);
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球面
 */
TEST_F(AcisGmeTest, api_offset_face_111) {
    API_BEGIN
    BODY* body1;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -3, gme_offset_face, NULL, NULL);
    }
    API_END
}
/**
 * @brief 负向（容差外）偏移球面
 */
TEST_F(AcisGmeTest, api_offset_face_112) {
    API_BEGIN
    BODY* body1;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -10, gme_offset_face, NULL, NULL);
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求并体单个面
 */
TEST_F(AcisGmeTest, api_offset_face_113) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求并体两个面
 */
TEST_F(AcisGmeTest, api_offset_face_114) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求并体三个面
 */
TEST_F(AcisGmeTest, api_offset_face_115) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求并体4个面
 */
TEST_F(AcisGmeTest, api_offset_face_116) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求并体5个面
 */
TEST_F(AcisGmeTest, api_offset_face_117) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求并体单个面
 */
TEST_F(AcisGmeTest, api_offset_face_118) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求并体两个面
 */
TEST_F(AcisGmeTest, api_offset_face_119) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求并体三个面
 */
TEST_F(AcisGmeTest, api_offset_face_120) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求并体4个面
 */
TEST_F(AcisGmeTest, api_offset_face_121) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求并体5个面
 */
TEST_F(AcisGmeTest, api_offset_face_122) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_subtract(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 正向偏移柠檬体面
 */
TEST_F(AcisGmeTest, api_offset_face_123) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 5, gme_offset_face, NULL, NULL);
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移柠檬体面
 */
TEST_F(AcisGmeTest, api_offset_face_124) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -5, gme_offset_face, NULL, NULL);
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求交体单个面
 */
TEST_F(AcisGmeTest, api_offset_face_125) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求交体两个面
 */
TEST_F(AcisGmeTest, api_offset_face_126) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求交体三个面
 */
TEST_F(AcisGmeTest, api_offset_face_127) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求交体4个面
 */
TEST_F(AcisGmeTest, api_offset_face_128) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移球体与圆柱体求交体5个面
 */
TEST_F(AcisGmeTest, api_offset_face_129) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求交体单个面
 */
TEST_F(AcisGmeTest, api_offset_face_130) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求交体两个面
 */
TEST_F(AcisGmeTest, api_offset_face_131) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求交体三个面
 */
TEST_F(AcisGmeTest, api_offset_face_132) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求交体4个面
 */
TEST_F(AcisGmeTest, api_offset_face_133) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移球体与圆柱体求交体5个面
 */
TEST_F(AcisGmeTest, api_offset_face_134) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_sphere(SPAposition(0, 0, 0), 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 正向偏移柠檬体与圆柱体求交一个面
 */
TEST_F(AcisGmeTest, api_offset_face_135) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 正向偏移柠檬体与圆柱体求交两个面
 */
TEST_F(AcisGmeTest, api_offset_face_136) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 正向偏移柠檬体与圆柱体求交三个面
 */
TEST_F(AcisGmeTest, api_offset_face_137) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 正向偏移柠檬体与圆柱体求交四个面
 */
TEST_F(AcisGmeTest, api_offset_face_138) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 正向偏移柠檬体与圆柱体求交五个面
 */
TEST_F(AcisGmeTest, api_offset_face_139) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, 5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移柠檬体与圆柱体求交一个面
 */
TEST_F(AcisGmeTest, api_offset_face_140) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);

        i++;
        if(i == 1) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移柠檬体与圆柱体求交两个面
 */
TEST_F(AcisGmeTest, api_offset_face_141) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 2) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移柠檬体与圆柱体求交三个面
 */
TEST_F(AcisGmeTest, api_offset_face_142) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 3) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移柠檬体与圆柱体求交四个面
 */
TEST_F(AcisGmeTest, api_offset_face_143) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 4) break;
    }
    API_END
}
/**
 * @brief 负向（容差内）偏移柠檬体与圆柱体求交五个面
 */
TEST_F(AcisGmeTest, api_offset_face_144) {
    API_BEGIN
    BODY* body1;
    BODY* body2;
    gme_api_solid_torus(SPAposition(0, 0, 0), 15, 10, body1);
    gme_api_solid_cylinder_cone(SPAposition(0, 0, -15), SPAposition(0, 0, 15), 3, 3, 3, NULL, body2);
    gme_api_unite(body2, body1);
    ENTITY_LIST face_list;
    FACE* f = NULL;
    FACE* gme_offset_face = NULL;
    FACE* acis_offset_face = NULL;
    get_faces(body1, face_list);
    int i = 0;
    while(f = (FACE*)face_list.next()) {
        api_offset_face(f, -1.5, gme_offset_face, NULL, NULL);
        i++;
        if(i == 5) break;
    }
    API_END
}